package collection;

import java.util.ArrayList;
import java.util.Collection;

/*
* JDK5新特性:
*   增强for(for-each)
*     适用场景:
*        简化集合和数组的遍历
*        要求集合必须继承或实现 Iterable 接口
*     格式:
*       for(要遍历的容器中的元素类型 变量名: 数组/集合){
*       //取出元素
*   }
*  注意事项:
*   1.增强for在遍历的时候无法操作数组的索引
*   2.增强for针对集合来说,底层依然使用的是迭代器
*   3.注意增强for上元素的类型
* */
public class CollectionDemo06 {
    public static void main(String[] args) {
        //method01();
        Collection c = new ArrayList();
        c.add("abc");
        c.add(123);//123 = new Integer(123)
        c.add("def");

        //增强for对集合来说,底层还是运用的迭代器原理
        for(Object ele:c){
            System.out.println(ele);
        }
        System.out.println("-----------------");

        //以下循环会报错:ClassCastException(类型转换异常)
        //当我们遍历第二个元素
        //相当于Object ele = new Integer(123); =>  String str = (String) ele; => String str = (String) new Integer(123);导致类型转换异常
/*        for(Object ele:c){
            String str = (String) ele;
            char c1 = ((String) ele).charAt(1);
            System.out.println(c1);
        }*/

        for(Object ele:c){
            if(ele instanceof String str){//判断当前ele指向的对象是否是String的实例
                System.out.println(str.charAt(1));
            }else{
                System.out.println(ele);
            }
        }
    }

    private static void method01() {
        int[] arr = {13, 15, 17, 21};
/*        //1.按照索引遍历
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }*/

        //2.增强for遍历
        for(int element:arr){
            System.out.println(element);//element存储每次循环的元素
        }
        System.out.println("--------------------");

        //3.增强for+数组索引
        int index = 0;
        for(int element:arr){
            System.out.println(element);//element存储每次循环的元素
            System.out.println(index);
            index++;
        }
    }
}
